package com.nbstar.film.spider.excel;

import com.nbstar.film.spider.domain.FilmSpiderDomain;
import com.nbstar.film.spider.engine.BaseSpiderEngine;
import com.nbstar.film.spider.pojo.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Row;

import java.util.function.Function;

public class WholeSpiderExcelWriter  extends XSSExcelWriter {

    public WholeSpiderExcelWriter(String sheetName, String excelPath) {
        super(sheetName, excelPath);
    }

    @Override
    protected void initExcelHeader(Row r) {
        int i = 0;
        r.createCell(i++).setCellValue("公司名称");
        r.createCell(i++).setCellValue("序号");
        r.createCell(i++).setCellValue("节目集名称");
        r.createCell(i++).setCellValue("标题索引名");
        r.createCell(i++).setCellValue("对白语言");
        r.createCell(i++).setCellValue("节目集类型");	//给表头定义字段名
        r.createCell(i++).setCellValue("制片年份");	//给表头定义字段名
        r.createCell(i++).setCellValue("是否院线上映");
        r.createCell(i++).setCellValue("票房（亿)");
        r.createCell(i++).setCellValue("豆瓣评分");
        r.createCell(i++).setCellValue("IMDb评分");
        r.createCell(i++).setCellValue("猫眼评分");

        r.createCell(i++).setCellValue("优酷评分");
        r.createCell(i++).setCellValue("爱奇艺评分");
        r.createCell(i++).setCellValue("腾讯评分");

        r.createCell(i++).setCellValue("二级分类");
        r.createCell(i++).setCellValue("播出平台");
        r.createCell(i++).setCellValue("外语名称");

        r.createCell(i++).setCellValue("导演");
        r.createCell(i++).setCellValue("演员");
        r.createCell(i++).setCellValue("上映时间");
        r.createCell(i++).setCellValue("上映地点");
        r.createCell(i++).setCellValue("影片时长");

        r.createCell(i++).setCellValue("描述");

        r.createCell(i++).setCellValue("综合评分");
        r.createCell(i++).setCellValue("豆瓣参评人数");
        r.createCell(i++).setCellValue("IMDb参评人数");
        r.createCell(i++).setCellValue("猫眼参评人数");
        r.createCell(i++).setCellValue("综合参评");
        r.createCell(i++).setCellValue("预打分数");
        r.createCell(i++).setCellValue("集数");
        r.createCell(i++).setCellValue("版权号");
        r.createCell(i++).setCellValue("版权有效期");
        r.createCell(i++).setCellValue("内容亮点");

        r.createCell(i++).setCellValue("豆瓣抓取结果");
        r.createCell(i++).setCellValue("IMDB抓取结果");
        r.createCell(i++).setCellValue("猫眼抓取结果");
        r.createCell(i++).setCellValue("电视猫抓取结果");
        r.createCell(i++).setCellValue("百科抓取结果");

        r.createCell(i++).setCellValue("优酷抓取结果");
        r.createCell(i++).setCellValue("爱奇艺抓取结果");
        r.createCell(i++).setCellValue("腾讯抓取结果");


    }

    @Override
    protected void writeRow(Row r, FilmExcelInfo filmDomain) {
        int i = 0;
        r.createCell(i++).setCellValue(filmDomain.getCompany());
        r.createCell(i++).setCellValue(filmDomain.getSeqNo());
        r.createCell(i++).setCellValue(filmDomain.getFilmName());
        r.createCell(i++).setCellValue(filmDomain.getIndexName());
        r.createCell(i++).setCellValue(filmDomain.getLanguage());
        r.createCell(i++).setCellValue(filmDomain.getType());
        r.createCell(i++).setCellValue(filmDomain.getArriveDate());
        r.createCell(i++).setCellValue(filmDomain.getOnCinema());
        ;
        r.createCell(i++).setCellValue(filmDomain.getBoxOffice());
        r.createCell(i++).setCellValue(filmDomain.getDoubanScore());
        r.createCell(i++).setCellValue(filmDomain.getImdbScore());
        r.createCell(i++).setCellValue(filmDomain.getMaoyanScore());

        r.createCell(i++).setCellValue(filmDomain.getYoukuScore());
        r.createCell(i++).setCellValue(filmDomain.getIqyScore());
        r.createCell(i++).setCellValue(filmDomain.getQqScore());

        r.createCell(i++).setCellValue(filmDomain.getCategory());
        r.createCell(i++).setCellValue(filmDomain.getOnlinePlatform());
        r.createCell(i++).setCellValue(filmDomain.getEname());

        r.createCell(i++).setCellValue(filmDomain.getDirector());
        r.createCell(i++).setCellValue(filmDomain.getActor());
        r.createCell(i++).setCellValue(filmDomain.getArriveDate());
        r.createCell(i++).setCellValue(filmDomain.getArriveAddress());
        r.createCell(i++).setCellValue(filmDomain.getFileDuration());

        r.createCell(i++).setCellValue(filmDomain.getDesc());

        r.createCell(i++).setCellValue((filmDomain.getDoubanScore() + filmDomain.getImdbScore() + filmDomain.getMaoyanScore()) / 3);
        r.createCell(i++).setCellValue(filmDomain.getDoubanVotes());
        r.createCell(i++).setCellValue(filmDomain.getImdbVotes());
        r.createCell(i++).setCellValue(filmDomain.getMaoyanVotes());
        r.createCell(i++).setCellValue((filmDomain.getImdbVotes() + filmDomain.getDoubanVotes() + filmDomain.getMaoyanVotes()) / 3);

        boolean isChinaFilm = false;
        if (filmDomain.getArriveAddress() != null) {
            if (filmDomain.getArriveAddress().contains("中国")
                    || filmDomain.getArriveAddress().contains("大陆")
                    || filmDomain.getArriveAddress().contains("内地")
                    || filmDomain.getArriveAddress().contains("内陆")
                    || filmDomain.getArriveAddress().contains("香港")
                    || filmDomain.getArriveAddress().contains("台湾")) {
                isChinaFilm = true;
            }
        }
        //TODO 预打分，无法拿到从院线下线时间
        r.createCell(i++).setCellValue(0 );

        r.createCell(i++).setCellValue(filmDomain.getPartNum());
        r.createCell(i++).setCellValue(filmDomain.getCopyrightNumber());
        r.createCell(i++).setCellValue(filmDomain.getCopyrightValidDate());
        r.createCell(i++).setCellValue(filmDomain.getBrightSpot());

        r.createCell(i++).setCellValue(filmDomain.getDoubanResult());
        r.createCell(i++).setCellValue(filmDomain.getImdbResult());
        r.createCell(i++).setCellValue(filmDomain.getMaoyanResult());
        r.createCell(i++).setCellValue(filmDomain.getTvCatResult());
        r.createCell(i++).setCellValue(filmDomain.getBaikeResult());

        r.createCell(i++).setCellValue(filmDomain.getYoukuResult());
        r.createCell(i++).setCellValue(filmDomain.getIqyResult());
        r.createCell(i++).setCellValue(filmDomain.getQqResult());


    }

    private void setValue(FilmInfo filmInfo, FilmExcelInfo filmExcelInfo) {

        if (StringUtils.isEmpty(filmExcelInfo.getArriveAddress())) {
            filmExcelInfo.setArriveAddress(filmInfo.getArriveAddress());
        }
        if (StringUtils.isEmpty(filmExcelInfo.getArriveDate())) {
            filmExcelInfo.setArriveDate(filmInfo.getArriveDate());
        }

        if (StringUtils.isEmpty(filmExcelInfo.getCategory())) {
            filmExcelInfo.setCategory(filmInfo.getCategory());
        }

        if (StringUtils.isEmpty(filmExcelInfo.getOnlinePlatform())) {
            filmExcelInfo.setOnlinePlatform(filmInfo.getOnlinePlatform());
        }

        if (StringUtils.isEmpty(filmExcelInfo.getDirector())) {
            filmExcelInfo.setDirector(filmInfo.getDirector());
        }

        if (StringUtils.isEmpty(filmExcelInfo.getActor())) {
            filmExcelInfo.setActor(filmInfo.getActor());
        }


        if (StringUtils.isEmpty(filmExcelInfo.getFileDuration())) {
            filmExcelInfo.setFileDuration(filmInfo.getFileDuration());
        }

        if (StringUtils.isEmpty(filmExcelInfo.getPartNum())) {
            filmExcelInfo.setPartNum(filmInfo.getPartNum());
        }


        if (StringUtils.isEmpty(filmExcelInfo.getEname())) {
            filmExcelInfo.setEname(filmInfo.getEname());
        }


        if (StringUtils.isEmpty(filmExcelInfo.getAliasName())) {
            filmExcelInfo.setAliasName(filmInfo.getAliasName());
        }

        if (StringUtils.isEmpty(filmExcelInfo.getDesc())) {
            filmExcelInfo.setDesc(filmInfo.getDesc());
        }

        if (StringUtils.isEmpty(filmExcelInfo.getLanguage())) {
            filmExcelInfo.setLanguage(filmInfo.getLanguage());
        }
    }


    @Override
    public ExcelVedioInfo trans2Excel(FilmSpiderDomain domain) {
        FilmExcelInfo filmExcelInfo = new FilmExcelInfo();
        DouBanFilmInfo douBanFilmInfo = (DouBanFilmInfo) domain.get(FilmSpiderDomain.SPIDER_FROM_DOUBAN);
        MaoYanFilmInfo maoyanFilmInfo = (MaoYanFilmInfo) domain.get(FilmSpiderDomain.SPIDER_FROM_MAOYAN);
        FilmInfo imdbFilmInfo = domain.get(FilmSpiderDomain.SPIDER_FROM_IMDB);
        FilmInfo tvCatFilmInfo = domain.get(FilmSpiderDomain.SPIDER_FROM_TVMAO_TV);
        FilmInfo bkFilmInfo = domain.get(FilmSpiderDomain.SPIDER_FROM_BAIKE);
        FilmInfo youkuFilmInfo =  domain.get(FilmSpiderDomain.SPIDER_FROM_YOUKU);
        FilmInfo iqyFilmInfo = domain.get(FilmSpiderDomain.SPIDER_FROM_IQY);
        FilmInfo qqFilmInfo = domain.get(FilmSpiderDomain.SPIDER_FROM_QQ);

        if (douBanFilmInfo != null) {
            filmExcelInfo.setDoubanScore(douBanFilmInfo.getAverage());

            filmExcelInfo.setDoubanVotes(douBanFilmInfo.getVotes());


            if (douBanFilmInfo.isSuccess()) {
                filmExcelInfo.setDoubanResult("成功");
                setValue(douBanFilmInfo, filmExcelInfo);
            }

        }

        if (maoyanFilmInfo != null) {
            filmExcelInfo.setBoxOffice(maoyanFilmInfo.getBoxOffice());
            filmExcelInfo.setMaoyanScore(maoyanFilmInfo.getAverage());
            filmExcelInfo.setMaoyanVotes(maoyanFilmInfo.getVotes());

            if (maoyanFilmInfo.isSuccess()) {
                filmExcelInfo.setMaoyanResult("成功");
                setValue(maoyanFilmInfo, filmExcelInfo);
            }


        }

        if (tvCatFilmInfo != null) {

            filmExcelInfo.setEpisode(tvCatFilmInfo.getPartNum());

            if (tvCatFilmInfo.isSuccess()) {
                filmExcelInfo.setTvCatResult("成功");
                setValue(tvCatFilmInfo, filmExcelInfo);
            }

        }



        if (imdbFilmInfo != null) {
            filmExcelInfo.setImdbScore(imdbFilmInfo.getAverage());
            filmExcelInfo.setImdbVotes(imdbFilmInfo.getVotes());
            if (imdbFilmInfo.isSuccess()) {
                filmExcelInfo.setImdbResult("成功");
                setValue(imdbFilmInfo, filmExcelInfo);
            }

        }

        //TODO 从电视猫上面获取是否院线上线
        if (!StringUtils.isEmpty(filmExcelInfo.getArriveDate())) {
            filmExcelInfo.setOnCinema("是");
        } else {
            filmExcelInfo.setOnCinema("否");
        }



        if (bkFilmInfo != null) {

            if (bkFilmInfo.isSuccess()) {
                filmExcelInfo.setBaikeResult("成功");
                setValue(bkFilmInfo, filmExcelInfo);
            }
        }

        if (youkuFilmInfo != null) {
            filmExcelInfo.setYoukuScore(youkuFilmInfo.getAverage());
            if (youkuFilmInfo.isSuccess()) {
                filmExcelInfo.setYoukuResult("成功");
                setValue(youkuFilmInfo, filmExcelInfo);
            }

            if (youkuFilmInfo.isNeedVip()) {
                filmExcelInfo.setYKNeedVip("是");
            }
        }

        if (iqyFilmInfo != null) {
            filmExcelInfo.setIqyScore(iqyFilmInfo.getAverage());
            if (iqyFilmInfo.isSuccess()) {
                filmExcelInfo.setIqyResult("成功");
                setValue(iqyFilmInfo, filmExcelInfo);
            }

            if (iqyFilmInfo.isNeedVip()) {
                filmExcelInfo.setIQYNeedVip("是");
            }

        }

        if (qqFilmInfo != null) {
            filmExcelInfo.setQqScore(qqFilmInfo.getAverage());
            if (qqFilmInfo.isSuccess()) {
                filmExcelInfo.setQqResult("成功");
                setValue(qqFilmInfo, filmExcelInfo);
            }

            if (qqFilmInfo.isNeedVip()) {
                filmExcelInfo.setTXNeedVip("是");
            }
        }


        filmExcelInfo.setBrightSpot(domain.getRaw().getBrightSpot());
        filmExcelInfo.setCopyrightNumber(domain.getRaw().getCopyrightNumber());
        filmExcelInfo.setCopyrightValidDate(domain.getRaw().getCopyrightValidDate());

        filmExcelInfo.setFilmName(domain.getRaw().getFilmName());
        filmExcelInfo.setSeqNo(domain.getRaw().getSeqNo());



        return filmExcelInfo;
    }
}
